WAX技术指南第四期:如何构建一个稳固的WAX主网节点
原文:EOSphere (Ross Dold) 翻译:WAX Eastern (NFT Gamer)
如果您一直在关注我们的 WAX 技术指南系列,您现在应该能够在安全的WAX测试网环境中构建和运行基于Antelope的 WAX 软件。免费提供的代币和相对较低的系统要求使 WAX 测试网成为学习的理想场所,但现在是升级到WAX主网的时候了。
第四期WAX技术指南将为您提供构建稳固的WAX主网节点的方法。
如何构建WAX主网节点
就Antelope链而言,WAX主网对基础设施的要求非常高。当然,WAX主网在不断发展,有很多方法可以满足这些要求。
本文将介绍一个当前有效(2022 年 9 月)并由 EOSphere Guild使用的示例,该节点每天为多个对等点和数百万个API请求提供服务。
主网要求
硬件
如果您想生产块,建议使用 4 核 CPU / 4Ghz+
(1) 256GB+ 磁盘/企业级 SSD 或 NVMe(高耐久性)
(2) 4TB+ 磁盘/SAS 或 SATA 都可以,但首选 SSD 或 NVMe
128GB+ 内存
操作系统
Ubuntu 18.04
Ubuntu 20.04(推荐)
Ubuntu 22.04
互联网
宽带/光纤连接(100Mb/s 同步及以上)
静态公共IP地址(终止于此节点或使用 NAT 转发)
准备操作系统环境
在构建和配置WAX软件之前,本例中的操作系统环境 Ubuntu 20.04 需要针对性能进行配置,并承担负载。
泽字节文件系统 (ZFS)
此节点构建使用两个离散磁盘来平衡磁盘IO并为 blocks.log 文件提供更实惠的存储选项,该文件目前为2.1TB 且还在增长。
磁盘1是高速企业级 SSD 或 NVMe 将用于 WAX 软件、所有配置和状态文件的操作系统磁盘。状态文件是极其 IO 密集型的,消费级的 SSD 的寿命将由于大量写入而变得短暂,因此需要使用高耐久性企业 SSD 或 NVMe。
注意:需要注意的是,如果您有足够的可用空间,可以在内存中运行这些状态文件,这个主题将在以后的文章中介绍。
在此示例中,磁盘 1 将运行默认的操作系统 Ext4 文件系统,该系统已在 Ubuntu 20.04 安装期间植入。
磁盘 2 是大容量 SATA 或 SAS 磁盘,将托管 blocks.log 文件。块目录上的 IO 需求远低于状态文件,速度较慢、容量较大的基于主轴的磁盘仍然适用。
在此示例中,磁盘 2 将运行 ZFS 文件系统,这将给我们带来两个主要好处。ZFS 将使我们能够使用 LZ4 压缩(目前有 1.3 倍的增益)并且它将通过自适应替换缓存 (ARC) 改进磁盘 IO。
使用以下配置在磁盘 2 上实施 ZFS:
#Install ZFS
> sudo apt-get install zfsutils-linux
#Locate the Disk 2 device name
> lsblk
#Create ZFS Pool called "datavolume" on device "sdb"
> sudo zpool create datavolume /dev/sdb
#Enable LZ4 compression
> sudo zfs set compression=lz4 datavolume
#Disable ZFS access time Updates
> sudo zfs set atime=off datavolume
#Set ARC to only cache metadata
> sudo zfs set primarycache=all datavolume
#Set the mountpoint location to your preferred location
> sudo zfs set mountpoint=/home/eosphere/datavolume datavolume
#Verify ZFS Settings
> zfs get all
网络时间协议 (NTP)
对于全球网状区块链来说,跨所有节点同步时间至关重要。
Chrony (https://chrony.tuxfamily.org/)是一个优秀的 NTP 客户端,非常适合 WAX 主网的需求。
安装、配置和验证如下:
#Install Chrony
> sudo apt install chrony
#If necessary manually add local peers, these are AU servers
> sudo nano /etc/chrony/chrony.conf
server 0.pool.ntp.org
server 1.pool.ntp.org
server 2.pool.ntp.org
server 3.pool.ntp.org
#Restart Chrony
> sudo /etc/init.d/chrony restart
#Verify
> chronyc sources -v
> chronyc tracking
#Set your local timezone if neccesary
> sudo timedatectl set-timezone Australia/Perth
堆栈限制和打开文件
WAX 软件内存寻址和生产主网节点将收到的API请求数量要求增加 Ubuntu 20.04 默认堆栈限制和打开文件数量。
配置并验证提高的限制,如下所示:
> sudo nano /etc/systemd/system.conf
#Append the following configuration
DefaultLimitNOFILE=64000
DefaultLimitSTACK=65536000
#Restart server and verify
> ulimit -a
构建软件
WAX 软件来自开源 Antelope 软件,但经过修改以适应 WAX 协议网络的需要。
目前,WAX Block Producer 接受的软件构建和版本是 v3.1.0wax01,由EOS阿姆斯特丹公会成员cc32d9创建。
最新的 wax建造标签目前在 cc32d9 Github (https://github.com/cc32d9/wax-leap/tags)上可用。
构建过程
此示例使用 Ubuntu Linux 按照以下过程从源代码构建 WAX 软件:
> cd ~
> sudo apt install -y file
> git clone https://github.com/cc32d9/wax-leap.git
> cd wax-leap
> git checkout v3.1.0.wax01
> git submodule update --init --recursive
> sudo bash scripts/install_deps.sh
> mkdir build
# If necessary supplement $(nproc) below with the number of jobs your server can sustain, I suggest 4GB RAM required / job
> nice bash scripts/pinned_build.sh ~/wax-leap/build/leap-deps ~/wax-leap/build $(nproc)
# Binaries are located in ~/wax-leap/build/programs
配置
现在已经编制了一个干净的 WAX 软件版本,让我们开始配置 WAX 主网操作。
要配置和启动节点,将使用 nodeos,nodeos 是在每个 WAX 协议网络节点上运行的核心服务守护程序。
nodeos 可以配置为处理智能合约、验证交易、生成包含有效交易的块,并确认块以将它们记录在区块链上。
nodeos 的主要操作功能是;将其作为区块生产者、网络 API 端点、P2P 种子节点或状态历史节点运行。通常在 WAX 主网等繁忙的网络上,您会在物理上分散的服务器上分离这些功能。
在此 WAX 主网示例中,您将使您的节点连接到其他网络对等点,提供 P2P 种子节点服务,并使该节点可用作网络 API 端点。本节点不提供历史数据查询支持。
nodeos 需要两个文件来连接到对等点并在 WAX 主网上运行:
Config.ini(配置文件)
按照以下命令运行不带配置的 nodeos 来创建默认的 config.ini:
> mkdir ~/waxdata
> cd ~/wax-leap/build/programs/nodeos
> ./nodeos --data-dir ~/waxdata --config-dir ~/waxdata
然后您将能够编辑新创建的config.ini并查看所有可用参数:
> cd ~/waxdata
> nano config.ini
现在编辑 config.ini 并添加以下配置设置:
# the location of the blocks directory on Disk 2
blocks-dir = /home/eosphere/datavolume/blocks
wasm-runtime = eos-vm-jit
chain-state-db-size-mb = 131072
chain-state-db-guard-size-mb = 1024
enable-account-queries = true
http-server-address = 0.0.0.0:8888
access-control-allow-origin = *
access-control-allow-headers = Origin, X-Requested-With, Content-Type, Accept
http-max-response-time-ms = 100
verbose-http-errors = true
http-validate-host = false
p2p-listen-endpoint = 0.0.0.0:9876
# 3dkrenderwax: FI, wax-peer
p2p-peer-address = peer.3dkrender.com:9880
# 3dkrenderwax: FI, query
p2p-peer-address = query.3dkrender.com:9880
# amsterdamwax: NL, Amsterdam
p2p-peer-address = wax.eu.eosamsterdam.net:9101
# amsterdamwax: US, Washington, D.C.
p2p-peer-address = waxp2p.us.eosamsterdam.net:9101
# blokcrafters: CA, Montreal, Quebec
p2p-peer-address = wax-peer-ca.blokcrafters.io:9876
# blokcrafters: FI, Helsinki, Uusimaa
p2p-peer-address = wax-peer-eu.blokcrafters.io:9876
# bp.box: KY, Cayman Islands
p2p-peer-address = wax.defibox.xyz:9966
# bp.wecan: GB, London
p2p-peer-address = seed2-wax-mainnet.wecan.dev:14998
# bp.wecan: US, NewYork
p2p-peer-address = seed3-wax-mainnet.wecan.dev:14998
# cryptolions1: DE, Germany-Finland
p2p-peer-address = wax.cryptolions.io:9876
# dapplica: DE, Germany-Finland
p2p-peer-address = wax.dapplica.io:9876
# eosauthority: DE, Falkenstein
p2p-peer-address = node-wax.eosauthority.com:10301
# eosauthority: FI, Helsinki
p2p-peer-address = node-wax-p2p.eosauthority.com:10301
# eosdacserver: GB, United Kingdom
p2p-peer-address = wax-p2p.eosdac.io:29876
# eosdublinwow: FI, Finland
p2p-peer-address = wax.p2p.eosdublin.io:9876
# eoseouldotio: JP, Seoul
p2p-peer-address = p2p.wax.eoseoul.io:29876
# eosphereiobp: CA, Beauharnois
p2p-peer-address = peer1-wax.eosphere.io:9876
# eosphereiobp: CA, Beauharnois
p2p-peer-address = peer2-wax.eosphere.io:9876
# greeneosiobp: DE, Germany
p2p-peer-address = p2p1.wax.greeneosio.com:9876
# guild.nefty: DE, Germany
p2p-peer-address = p2p-node1.neftyblocks.com:9876
# guild.nefty: FI, Finland
p2p-peer-address = p2p-node2.neftyblocks.com:9876
# ledgerwiseio: FI, LB
p2p-peer-address = waxp2p.ledgerwise.io:21877
# nation.wax: CA, Canada
p2p-peer-address = wax.seed.eosnation.io:9876
# oneinacilian: GB, United Kingdom
p2p-peer-address = p2p.oiac.io:9876
# sentnlagents: GB, United Kingdom
p2p-peer-address = waxp2p.sentnl.io:9876
# tokengamerio: DE, Germany
p2p-peer-address = peer2.wax.tgg.gg:9876
# waxhiveguild: FI, Finnland
p2p-peer-address = peer1.hivebp.io:9876
# waxhiveguild: DE, Germany
p2p-peer-address = peer2.hivebp.io:9876
# waxmadrid111: DE, SEED
p2p-peer-address = wax-seed.eosiomadrid.io:9876
# waxswedenorg: SE, Sweden
p2p-peer-address = p2p.waxsweden.org:35777
# PeerList - https://validate.eosnation.io/wax/reports/config.html
agent-name = "<yourname> WAX Mainnet"
max-clients = 100
sync-fetch-span = 500
plugin = eosio::http_plugin
plugin = eosio::chain_plugin
plugin = eosio::chain_api_plugin
Genesis.json
这些是 WAX 主网上每个新的起始节点所需的初始状态参数。创建文件如下:
> cd ~/waxdata
> nano genesis.json
将以下参数添加到 WAX 公共主网的 genesis.json文件中:
{
"initial_timestamp": "2019-06-05T12:00:00.000",
"initial_key": "EOS8i2pkwtv2JmdYWNJdcy5BcJ7wCE5q6mpE1hwT25HdgHMzeRday",
"initial_configuration": {
"max_block_net_usage": 1048576,
"target_block_net_usage_pct": 1000,
"max_transaction_net_usage": 524288,
"base_per_transaction_net_usage": 12,
"net_usage_leeway": 500,
"context_free_discount_net_usage_num": 20,
"context_free_discount_net_usage_den": 100,
"max_block_cpu_usage": 500000,
"target_block_cpu_usage_pct": 2000,
"max_transaction_cpu_usage": 150000,
"min_transaction_cpu_usage": 100,
"max_transaction_lifetime": 3600,
"deferred_trx_expiration_window": 600,
"max_transaction_delay": 3888000,
"max_inline_action_size": 4096,
"max_inline_action_depth": 4,
"max_authority_depth": 6
}
}
运行Nodeos
现在已经配置了 config.ini 并创建了初始 WAX 主网链参数 genesis.json,您现在可以加入网络并同步节点。
使用屏幕即使在断开连接时也能使您的会话保持活动状态,用法如下:
#Create a new screen session
> screen -US wax
#Disconnect screen session
> ctrl-a+d
#Reconnect screen session
> screen -r wax
使用指向配置、数据目录和创世文件的指针运行Nodeos:
> cd ~/wax-leap/build/programs/nodeos
> nodeos --data-dir ~/waxdata --config-dir ~/waxdata --genesis-json ~/waxdata/genesis.json
您的 WAX 主网节点现在将开始与配置的对等点同步,直到它赶上并与 WAX 主网链同步。
可以通过从快照和有效的 blocks.log 开始来加快同步过程,该过程在 WAX 技术指南第二期中进行了解释。
下一期 WAX 技术指南将研究使用代理来前置您的 API 服务,该代理将终止客户端 SSL 请求并为这些请求提供限制。
Play and Own 将在2023年取代Play to Earn
了解更多,加入橘猫玩家公会:
Telegram:https://t.me/NFTGamerChina
Discord:https://discord.gg/NU82sXeTNs
阅读原文,获取详细信息